package common;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import bean.Cart;
import bean.Goods;
import service.CartDAO;
import service.GoodsDAO;
import service.ProductDAO;

public class CartShop {
	//<goodsid,goodsNum>
	private static Map<Integer,Integer> cartMap=new HashMap<Integer, Integer>();
	private static CartDAO cdao=new CartDAO();
	private static ProductDAO pdao=new ProductDAO();
	private int userid;
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	//购物车初始化时是未登录则用户id=0，为临时购物车
	public CartShop(int userid) {
		super();
		this.userid = userid;
	}
	
	//返会购物车是否为空
	public int ifEmpty() {
		return (cartMap.isEmpty())?1:0;
	}
	
	//登录购物车后，将原有的商品与之前购物车的商品进行合并,将未登录之前的购物车的商品
	//更新到对应用户的数据库中，然后把数据库中的信息同步到购物车对象中
	public void LoginCartShop(int userid) {
		setUserid(userid);
		if(!cartMap.isEmpty()) {
			Map<Integer,Integer> tempCart=new HashMap<Integer, Integer>();
			tempCart.putAll(cartMap);
			cartMap.clear();
			//将之前添加到购物车的所有商品再次根据用户id存到数据库中
			for(Map.Entry<Integer, Integer> en:tempCart.entrySet()) {
				addGoods(userid, en.getKey(), en.getValue());
			}
		}
		List<Cart> cartList=cdao.queryByUserid(userid);
		if(cartList!=null && cartList.size()!=0) {
			cartMap.clear();
			//将已经更新后的数据库中的对应用户的购物车的商品信息存到购物车对象中
			for(Iterator<Cart> it=cartList.iterator();it.hasNext();) {
				Cart c=it.next();
				cartMap.put(c.getGoodsid(), c.getGoodsNum());
			}
		}
	}
	
	//获取购物车内的商品
	public static Map<Integer, Integer> getCarts() {
		return cartMap;
	}
	

	//购买商品，购物车内如果已有该商品，则只添加数量,如果userid!=0则在数据库中更新数据
	public void addGoods(int userid,int goodsid, int num){
		int count=pdao.queryByGoodsid(goodsid).get(0).getCount();
		if(cartMap.containsKey(goodsid)) {
			cartMap.put(goodsid, ((cartMap.get(goodsid)+num)>=count?count:(cartMap.get(goodsid)+num)));
		}
		else {
			cartMap.put(goodsid, num>=count?count:num);
		}
		
		if(userid!=0) {
			List<Cart> goodsList=cdao.queryByUseridAndGoodsid(userid, goodsid);
			if(goodsList.size()!=0 && goodsList!=null && goodsList.get(0).getGoodsNum()>=1) {
				updateNum(userid, goodsid, ((goodsList.get(0).getGoodsNum()+num)>=count?count:(goodsList.get(0).getGoodsNum()+num)));
			}
			else {
				cdao.addGoods(userid, goodsid, num>=count?count:num);
			}
		}
	}
	//修改商品数量如果userid！=0则在数据库中更新数据
	public void updateNum(int userid,int goodsid, int num){
		if(num==0) {
			deleteGoods(userid, goodsid);
		}
		else{
			int count=pdao.queryByGoodsid(goodsid).get(0).getCount();
			cartMap.put(goodsid, num>=count?count:num);
			if(userid!=0) {
				cdao.updateNum(userid, goodsid, num>=count?count:num);
			}
		}
		
		
	}
	//删除购物车内的指定商品如果userid！=0则在数据库中更新数据
	public void deleteGoods(int userid,int goodsid){
		cartMap.remove(goodsid);
		if(userid!=0) {
			cdao.deleteGoods(userid, goodsid);
		}
	}
	//清除购物车内所有商品如果userid！=0则在数据库中更新数据
	public void clear(int userid){
		cartMap.clear();
		if(userid!=0) {
			cdao.deleteAllGoods(userid);
		}
	}

}
